perm filename FLOYD.SAI[1,JMC] blob sn#005227 filedate 1970-02-19 generic text, type T, neo UTF8
00050	BEGIN
00100	PROCEDURE SORT(INTEGER ARRAY A);
00200	BEGIN 
00300	INTEGER MAX,NN,N,L,R,W,M,TEMP,K,T;
00350	LABEL AA,D,BB,DD,EE;
00400	INTEGER PROCEDURE DOWN(INTEGER X);RETURN(X%2);
00500	INTEGER PROCEDURE LEFT(INTEGER X);RETURN(2*X);
00600	INTEGER PROCEDURE RIGHT(INTEGER X);RETURN(2*X+1);
00700	MAX←ARRINFO(A,2);
00800	
00900	FOR NN←DOWN(MAX) STEP -1 UNTIL 1 DO BEGIN
01000	N←NN;
01100	AA: IF (L←LEFT(N))>MAX THEN GO TO D;
01200	IF L=MAX THEN BEGIN IF A[L]<A[N] THEN
01300	BEGIN T←A[L];A[L]←A[N];A[N]←T END; GO TO D END;
01400	
01500	W←A[M←IF A[L]<A[R←RIGHT(N)] THEN L ELSE R];
01600	IF A[N] < W THEN GO TO D;
01700	T←A[N];A[N]←A[M];A[M]←T; IF M=L THEN N←LEFT(N) ELSE N←RIGHT(N); GO TO AA;
01800	D: END;
01900	
02000	FOR NN←MAX STEP -1 UNTIL 2 DO BEGIN
02100	TEMP←A[NN]; A[NN]←A[1]; N←1;
02200	BB:
02300	IF (L←LEFT(N))≥NN THEN BEGIN M←N; GO TO DD END;
02400	IF L=NN-1 THEN BEGIN A[N]←A[L]; M←L; GO TO DD END;
02500	M←IF A[L] < A[R←RIGHT(N)] THEN L ELSE R;
02600	A[N]←A[M]; N←M; GO TO BB;
02700	DD:
02800	A[M]←TEMP;
02900	EE:
03000	IF M>1 ∧ A[M] <A[K←DOWN(M)] THEN BEGIN
03100	T←A[M];A[M]←A[K];A[K]←T; M←K; GO TO EE END;
03200	END END;
03300	INTEGER N,I;
03400	OUTSTR("
03500	N=");N←CVD(INCHWL);
03600	BEGIN INTEGER ARRAY A[1:N];
03700	OUTSTR("NOW THE ARRAY TO BE SORTED
03800	");
03900	FOR I←1 STEP 1 UNTIL N DO A[I]←CVD(INCHWL);
04000	
04100	SORT(A);
04200	
04300	FOR I←1 STEP 1 UNTIL N DO OUTSTR(CVS(A[I])&" ");
04400	END END;